# coding: utf8

from django import http  
from django import forms
from django.shortcuts import render_to_response
from mysite.settings import TEMPLATE_DIRS 
import urllib
import codecs
import gzip

#from models import *
#from utils import *
from django.http import HttpResponseRedirect

class UploadForm(forms.Form):
    ''' Uma classe newforms que manipula os uploads de arquivos. '''

    uploadFile = forms.Field(widget=forms.FileInput)
    nomeApp = forms.CharField(widget=forms.TextInput(attrs={'size':'40'}))

def upload(request):
    ''' Funcao de upload. '''
    form = UploadForm()
    arq = request.GET.get('arq', '')
    err = request.GET.get('err', '')

    if (request.POST):
        filename = request.POST['upload']

        if (request.FILES):
            try:
                file_data = request.FILES['uploadFile']
                arquivo_dia = "/".join(TEMPLATE_DIRS[0].split('/')[:-1]) + '/model/arquivo.dia'
                dia_file = open(arquivo_dia,'wb+')
                for chunk in file_data.chunks():
                    dia_file.write(chunk)
                dia_file.close()
                return HttpResponseRedirect('/upload?arq=%s' % unicode(u'Arquivo importado com sucesso!'))
            except:
                return HttpResponseRedirect('/upload?err=%s' % unicode(u'Erro na importação do arquivo!'))             

        if form.is_valid():
            form.save()
    else:
        form = UploadForm()

    data = { 'form': form, 'arq':arq, 'err':err
    }
    return render_to_response('upload.html', data)


def geraEstruturaApp(request):
    '''Esta função é utilizada para gerar todo o código esqueleto de uma aplicação
       Django, invocar o conversor e gerador de códigos e configurar a aplicação alvo
       de forma que o novo código gerado esteja acessível via Interface de Administração
       do Django'''
    from mysite.mda.converte import imprimePSM
    from xml.dom.minidom import *
    import os
    import os.path
    

    form = UploadForm()
    arq = request.GET.get('arq', '')
    err = request.GET.get('err', '')

    if request.method == 'POST': # Se o formulário foi submetido
        nome = request.POST['nomeApp']
        arquivo_dia = "/".join(TEMPLATE_DIRS[0].split('/')[:-1]) + '/model/arquivo.dia'

        try:
            f = codecs.open(arquivo_dia,"rb")
            # Os arquivos do Dia UML, são compactados com o gzip
            data = gzip.GzipFile(fileobj = f).read()
            pim = parseString(data)
            app_dir = "/".join(TEMPLATE_DIRS[0].split('/')[:-1]) + '/apps/' + nome + "/"

            if not (os.access(app_dir, os.W_OK) and os.path.isdir(app_dir)):
                os.mkdir(app_dir)   
    
            model_file = app_dir + '/models.py'
            imprimePSM(pim, model_file)
            return HttpResponseRedirect('/upload?arq=%s' % unicode(u'Arquivo gerado com sucesso!'))

        except Exception, e:
            return HttpResponseRedirect('/upload?err=%s' % e) #unicode(u'Erro na geração do arquivo!')

    else:
        form = UploadForm() 

        data = { 'form': form, 'arq':arq, 'err':err
        }
        return render_to_response('upload.html', data)